package com.qf.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 关于RabbitMQ的相关配置  -- Java配置类
 * @author lixu
 *
 *  spring-context.xml
 *    <bean id class=类帮助我们去创建 队列  交换机  绑定 RoutingKey
 *
 *    发消息 --》 交换机（名）  --绑定(RoutingKey  *.red.*  ) --> 队列1   boot-queue1
 *    发消息 --》 交换机（名）  --绑定(RoutingKey  *.red.*  ) --> 队列2   boot-queue2
 *
 *    交换机名称： boot-topic-exchange
 */
@Configuration
public class RabbitMQConfig {
    //Shift + Ctrl + u

    //交换机名称
    public static final String BOOT_TOPIC_EXCHANGE = "boot-topic-exchange"; //常量
    //关键词
    public static final String BOOT_TOPIC_ROUTINGKEY1 = "*.red.*"; //常量
    public static final String BOOT_TOPIC_ROUTINGKEY2 = "*.red.#"; //常量
    //队列名称
    public static final String BOOT_TOPIC_QUEUE1 = "boot-queue1"; //常量
    public static final String BOOT_TOPIC_QUEUE2 = "boot-queue2"; //常量


    /**
     * 创建队列1   1份
     * @Bean： Spring IOC将容器中  （第一次）
     *    // queue1() ; 方法被调用    还是从Spring容器获取出来的
     *
     *    <bean id=queue1  class
     */
    @Bean
    public Queue queue1(){
        //return new Queue(BOOT_TOPIC_QUEUE1);
        return QueueBuilder.durable(BOOT_TOPIC_QUEUE1).build();//工具类这样一个构建对象
    }
    /**
     * 创建队列2
     */
    @Bean
    public Queue queue2(){
        return QueueBuilder.durable(BOOT_TOPIC_QUEUE2).build();//工具类这样一个构建对象
    }
    /**
     * 创建交换机
     */
    @Bean
    public Exchange bootExchange(){
        return ExchangeBuilder.topicExchange(BOOT_TOPIC_EXCHANGE).build();
    }
    /**
     * 绑定 队列1
     */
    @Bean
    public Binding bindingQueue1ToBootExchange(Queue queue1,Exchange bootExchange){
        return BindingBuilder.bind(queue1).to(bootExchange).with(BOOT_TOPIC_ROUTINGKEY1).noargs();
    }
    /**
     * 绑定  队列2
     */
    @Bean
    public Binding bindingQueue2ToBootExchange(Queue queue2,Exchange bootExchange){
        return BindingBuilder.bind(queue2).to(bootExchange).with(BOOT_TOPIC_ROUTINGKEY2).noargs();
    }
}
